package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import com.itheima.service.impl.DeptServiceImpl;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;

import java.util.List;
        //DI冲突的情况向有三种方法选出优先实现类，一般企业开发Autowired就够用了
        //1.@Primary
         /*2.@Qualifier("deptServiceImpl")
        @Autowired*/
        //3.@Resource(name = "deptServiceImpl")

/**
 * 部门管理Controller
 */
@RequestMapping("/depts")
@RestController
public class DeptController {
    @Qualifier("deptServiceImpl")
    @Autowired
        private DeptService deptService; //= new DeptServiceImpl();

        @GetMapping
        public Result list()  {
            //1. 调用deptService
            List<Dept> deptList = deptService.list();
            //2. 响应数据
            return Result.success(deptList);
        }
        /**
         * 根据ID删除部门 - 简单参数接收: 方式一 (HttpServletRequest)
         */
        /*@DeleteMapping("/depts")
        public Result delete(HttpServletRequest request){
            String idStr = request.getParameter("id");
            int id = Integer.parseInt(idStr);

            System.out.println("根据ID删除部门: " + id);
            return Result.success();
        }*/

        /**
         * 通过Spring提供的 @RequestParam 注解，将请求参数绑定给方法形参
         * @param deptId
         * @return
         */
        /*@DeleteMapping("/depts")
        public Result delete(@RequestParam("id") Integer deptId){
            System.out.println("根据ID删除部门: " + deptId);
            return Result.success();
        }*/
    /**
     * 方案三：如果请求参数名与形参变量名相同，直接定义方法形参即可接收。（省略@RequestParam）
     *
     */
    @DeleteMapping
    public Result delete(Integer id){
        System.out.println("根据ID删除部门: " + id);
        //接收到参数后调用service的delete方法接收看接口文档是否有返回值 （增删改一般没有返回值）
        deptService.delete(id);
        return Result.success();
    }
    /**
     * 添加部门 - json格式参数接收
     */

    @PostMapping
    public Result add(@RequestBody Dept dept){
        System.out.println("添加部门: " + dept);
        deptService.add(dept);
        return Result.success();
    }

    /**
     * 根据ID查询部门--/depts/10
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        System.out.println("根据ID查询部门：" + id);
        Dept dept = deptService.getById(id);
        return Result.success(dept);
    }
    /**
     *
     *修改编辑部门
     */
    @PutMapping
    public Result update(@RequestBody Dept dept){
        System.out.println("修改部门:" + dept);
        deptService.update(dept);
        return Result.success();
    }

}

